package com.milo.java7.net.fileupload;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author: Milogenius
 * @create: 2019-09-20 11:41
 * @description: 文件上传的服务器端:读取客户端上传的文件,保存到硬盘中,给客户端返回响应信息
 * <p>
 *     1.明确
 *     数据源:上传的文件
 *     目的地:服务器磁盘d:\\upload
 * </p>
 **/
public class TCPServer {

    public static void main(String[] args) throws IOException {

        //1.创建一个ServerSocket对象,指定端口号
        ServerSocket server = new ServerSocket(8888);
        //2.使用ServerSocket对象的accept方法,获取到请求端的Socket对象
        Socket socket = server.accept();
        //3.使用Socket对象的getInputStream方法获取网络字节输入流InputStream
        InputStream is = socket.getInputStream();
        //4.判断d:\\upload文件夹是否存在,不存在则创建
        File file = new File("e:\\upload");
        if (!file.exists()) {
            file.mkdirs();
        }
        //5.创建一个本地字节输出流FileOutputStream对象
        FileOutputStream fos = new FileOutputStream(file+"\\1.jpg");
        //6.使用InputStream对象的read方法获取数据
        int len = 0;
        byte[] bytes = new byte[1024];
        while ((len = is.read(bytes))!=-1) {
            //7.使用FileOutputStream对象的write方法,将读取的文件保存到服务器的硬盘上;
            fos.write(bytes,0,len);
        }
        //8.使用Socket对象的方法getOutputStream获取网络字节输出流OutputStream对象;
        OutputStream os = socket.getOutputStream();
        //9.使用网络字节输出流OutputStream对象的write方法,给客户端响应;
        os.write("上传成功".getBytes());
        //10.上传成功
        fos.close();
        socket.close();
        server.close();
    }
}
